package imaSyncPull

import (
	"encoding/json"
	"os"
	"path/filepath"
)

// FlatDepartment 定义扁平化的部门结构
type FlatDepartment struct {
	ID       int    `json:"id"`
	ParentID string `json:"parentId"`
	Name     string `json:"name"`
	DelFlag  string `json:"delFlag"`
	Sort     int    `json:"sort"`
}

// SyncCache 定义同步缓存结构
type SyncCache struct {
	Departments map[int]FlatDepartment `json:"departments"`
	Users       []User                 `json:"users"`
	LastSync    string                 `json:"last_sync"`
}

const cacheFileName = "data/sync_cache.json"

// SaveCache 保存同步数据到缓存文件
func SaveCache(cache *SyncCache) error {
	// 确保目录存在
	if err := os.MkdirAll(filepath.Dir(cacheFileName), 0755); err != nil {
		return err
	}

	data, err := json.MarshalIndent(cache, "", "  ")
	if err != nil {
		return err
	}

	return os.WriteFile(cacheFileName, data, 0644)
}

// LoadCache 从缓存文件加载同步数据
func LoadCache() (*SyncCache, error) {
	data, err := os.ReadFile(cacheFileName)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, nil
		}
		return nil, err
	}

	var cache SyncCache
	if err := json.Unmarshal(data, &cache); err != nil {
		return nil, err
	}

	return &cache, nil
}

// GetCacheFilePath 获取缓存文件的完整路径
func GetCacheFilePath() string {
	return cacheFileName
}
